package com.sike.netty.im.server.service;

import com.sike.netty.im.server.util.LoginUtil;
import io.netty.channel.Channel;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 会话服务
 *
 * @author chenssy
 * @date 2023/09/15
 */
public class SessionService {
    /**
     * userId 与 Channel 的映射表
     */
    private final Map<String, Channel> userIdChannelMap = new ConcurrentHashMap<>();

    /**
     * Channel 与 userId 的映射表
     */
    private final Map<Channel,String> channelUserIdMap = new ConcurrentHashMap<>();

    /**
     * 绑定 userid 和 Channel
     * @param userid
     * @param channel
     */
    public void bind(String userid, Channel channel) {
        // 绑定 userid 与 Channel 的映射关系
        userIdChannelMap.put(userid,channel);
        // 绑定 Channel 与 userid 的映射关系
        channelUserIdMap.put(channel,userid);
    }


    /**
     * 根据用户ID获取 Channel
     *
     * @param userId 用户Id
     * @return Channel
     */
    public Channel getChannelByUserId(String userId) {
        return userIdChannelMap.get(userId);
    }

    /**
     * 根据 Channel 获取用户 ID
     * @param channel
     * @return
     */
    public String getUserIdByChannel(Channel channel) {
        return channelUserIdMap.get(channel);
    }


    /**
     * 解除绑定
     *
     * @param channel 频道
     * @param userId  用户id
     */
    public void unBind(Channel channel, String userId) {
        if (LoginUtil.hasLogin(channel)) {
            // 解绑 userid 与 Channel 的映射关系
            userIdChannelMap.remove(userId);
            // 解绑 Channel 与 userid 的映射关系
            channelUserIdMap.remove(channel);
        }
    }
}
